package com.eian.boot.common.core.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author alex.meng
 * @createTime 2025-09-12 16:26
 * @description 链路追踪注解，用于系统自调用的链路记录，如定时任务、事件、MQ消费者等
 * 支持通过 spel 表达式从参数中提取 traceId
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Trace {

    /**
     * SpEL 表达式，用于从方法参数中提取 traceId
     * 示例： "#message.headers['traceId']" 或 "#event.traceId"
     * 默认为空，表示不使用 SpEL，走自动生成逻辑
     */
    String spel() default "";
}